﻿using System;
using System.Web;

using System.Collections.Generic;

using System.Web.UI;
using System.Net.Mail;
using System.Configuration;
using Entidad;

using EvolSoftWeb;
using Negocio.BL;

namespace EvolSoftWeb
{
    public partial class Login : System.Web.UI.Page
    {
       
        UsuarioLogic BL_login = new UsuarioLogic();
        ClienteLogic BL_Cliente;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.VerificarEstadoSesion();                
            }
        }

        protected void btnIngresar_Click(object sender, EventArgs e)
        {
        
            this.Logear2();
        }



        private void insertarCliente()
        {
            BL_Cliente = new ClienteLogic();
            UsuarioLogic negocioUsuario = new UsuarioLogic();
            try
            {
                SRH_CLIENTE obj = new SRH_CLIENTE();
                obj.apeMaterno = txtApellidoMat.Text;
                obj.apePaterno = txtApellidoPat.Text;
                obj.clave = txtClave.Text;
                obj.estado = 1;
                obj.nombre = txtNombre.Text;
                obj.nroDocumento = txtDNI.Text;
                obj.sexo = cbosexo.Text;
                obj.tipo = 1;
                obj.usuario = txtCliente.Text;

                if (BL_Cliente.insert(obj))
                {

                    T_S_USUARIO usuario = new T_S_USUARIO();
                    usuario.ID_USUARIO = txtCliente.Text;
                    usuario.DES_NOMBRE = txtNombre.Text + "  " + txtApellidoPat.Text;
                    usuario.DES_PASSWORD = negocioUsuario.EncriptarPasswordUser(this.txtClave.Text);
                    usuario.DES_APELLIDOS = txtApellidoPat.Text +"  " +txtApellidoMat.Text;
                    usuario.IND_ESTADO = "A";
                    usuario.IND_COOKIE = "S";
                    if (negocioUsuario.insert(usuario))
                    {
                        negocioUsuario.PA_insertarUsuGrupo(txtCliente.Text, 6);
                        PopupRegistroUsuarioExterno.ShowOnPageLoad = false;
                        lblMsj.Text = string.Empty;
                        lblMsj.Text = "Se inserto correctamente el cliente";
                        string scriptExeption = "ShowPopupLogin();";
                        ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);
                    }
                    
                }
            }
            catch (Exception ex)
            {
                lblMsj.Text = string.Empty;
                lblMsj.Text = ex.InnerException==null?ex.Message:ex.InnerException.Message;
                string scriptExeption = "ShowPopupLogin();";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);
            }
        }
        protected void VerificarEstadoSesion()
        {
            if (Session[DatosSesion.User] != null)
            {
               Response.Redirect(Constantes.PaginaDefault);               
            }

            HttpCookie cookie = Request.Cookies[DatosSesion.InicioSesion];

            if (cookie != null)
            {
                if (cookie[DatosSesion.User] != null)
                {
                    Response.Redirect(Constantes.PaginaDefault);                    
                }
            }
        }
        string des_email="";
 
        string clave = "";
        void ActualizaClave() { 


         clave=BL_login.GenerarPass(1,8);
         BL_login.actualizarPassword(BL_login.EncriptarPasswordUser(clave), des_email);        
        
        }

        MailMessage mail = new MailMessage();

        void EnviarPasswordNuevo()
        {
            try
            {
                mail.From = new MailAddress(ConfigurationManager.AppSettings["MailFrom"], ConfigurationManager.AppSettings["UserNameSMTP"]);
                mail.To.Add(txtEmail.Text);
                mail.Subject = ("Password Nuevo ");
                mail.Body = ("Su nuevo password es : "+clave);
                SmtpClient s = new SmtpClient();
                s.Host = ConfigurationManager.AppSettings["EmailServer"];
                s.Port = 25;
                s.EnableSsl = false;
                s.UseDefaultCredentials = false;
                s.Credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["MailFrom"], ConfigurationManager.AppSettings["PasswordSMTP"]);
                s.Send(mail);

                lblMsj.Text = string.Empty;
                lblMsj.Text = "Su password ha sido enviado a su email";
                string scriptExeption = "ShowPopupLogin();";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);


            }
            catch
            {
                lblMsj.Text = string.Empty;
                lblMsj.Text = "No se pudo enviar al email por problemas de conexion";
                string scriptExeption = "ShowPopupLogin();";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);

            }




        }

   


    



     
        protected void lblRecuperarClave_Click(object sender, EventArgs e)
        {
            this.lblMensaje.Text = "Ingrese el email para enviarle el password.";
            this.pnlMensaje.CssClass = EstilosPagina.CssMensajeMsg;
            this.pnlRecuperar.Visible = true;
            this.pnlLogin.Visible = false;
        }


        void Logear2()
        {
            string username = this.txtUsuario.Text;
            string password = this.txtPassword.Text;
         
            try
            {
                string resultado = BL_login.ValidarUsuario(username, password);
                List<T_S_USUARIO> listaUsuario = BL_login.listarUser(username);
                if (resultado == ResultadoLogin.LoginOk)
                {
                    Session[DatosSesion.User] = username;
                    Global.user = txtUsuario.Text;
            
                    Response.Redirect("wFrmDefault.aspx");
                }
                
                else
                {


         
                    lblMsj.Text = string.Empty;
                    lblMsj.Text = "El nombre de usuario o la contraseña que ingresaste es incorrecto.";
                    string scriptExeption = "ShowPopupLogin();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);
                }

            }
            catch (Exception ex)
            {

                lblMsj.Text = string.Empty;
                    lblMsj.Text = "El nombre de usuario o la contraseña que ingresaste es incorrecto.";
                    string scriptExeption = "ShowPopupLogin();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);

            }
          
        }

        protected void btnIngresar_Click1(object sender, EventArgs e)
        {


          
            if (txtUsuario.Text == string.Empty)
            {

                lblMsj.Text = string.Empty;
                lblMsj.Text = "Debe ingresar su usuario.";
                string scriptExeption = "ShowPopupLogin();";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);

            }
            else if (txtPassword.Text == string.Empty)
            {



                lblMsj.Text = string.Empty;
                lblMsj.Text = "Debe ingresar su contraseña.";
                string scriptExeption = "ShowPopupLogin();";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);

            }
            else
            {


                this.Logear2();
            }


        }
        public struct ResultadoLogin
        {
            /// <summary>
            /// El login es correcto
            /// </summary>
            public const string LoginOk = "OK";

            /// <summary>
            /// El usuario no existe
            /// </summary>
            public const string LoginUserNoxiste = "seg_user_noexiste";

            /// <summary>
            /// El usuario esta inactivo
            /// </summary>
            public const string LoginUserInactivo = "seg_user_noactivo";

            /// <summary>
            /// El password ingresado no es correcto
            /// </summary>
            public const string LoginPwdIncorrecto = "seg_pws_incorrecto";
        }

        protected void btnRecuperar_Click1(object sender, EventArgs e)
        {
            if (txtEmail.Text.Trim() == string.Empty)
            {
                lblMsj.Text = string.Empty;
                lblMsj.Text = "Ingrese su Email por favor ";
                string scriptExeption = "ShowPopupLogin();";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);
            }
            else
            {

           
                if (des_email == string.Empty)
                {
                    lblMsj.Text = string.Empty;
                    lblMsj.Text = "El email ingresado no está registrado";
                    string scriptExeption = "ShowPopupLogin();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);

                }
                else
                {
                    this.ActualizaClave();
                    this.EnviarPasswordNuevo();
                    txtEmail.Text= string.Empty;

                }
            }


        }

        protected void btnCancelar_Click1(object sender, EventArgs e)
        {
            this.lblMensaje.Text = "Por favor ingrese usuario y password";
            this.pnlMensaje.CssClass = EstilosPagina.CssMensajeMsg;
            this.pnlLogin.Visible = true;
            this.pnlRecuperar.Visible = false;
        }

        protected void lblRegistrarUsuarioExterno_Click(object sender, EventArgs e)
        {
            PopupRegistroUsuarioExterno.ShowOnPageLoad = true;
        }

        protected void btnPopGuardar_Click(object sender, EventArgs e)
        {
            this.insertarCliente();
        }
    }
}